package com.xiangge.oop;

/*
    this关键字：
        引入： 目前为止在哪里见过this呢？  有参构造方法 , setter方法

        this的定义： 是本类对象的引用
            辅助理解： 哪个对象调用了this所在的方法，this就是哪个对象的引用

        this关键字的使用：
             明确： 就近原则： 当成员变量和局部变量同名时，在方法中默认优先访问局部变量，
             当局部变量没有再去访问成员变量, 如果成员变量也没有就报错
                               局部变量 >>> 成员变量

            -- this调用属性：    掌握
                    使用场景： 当在方法中强制直接访问成员变量时，需要使用： this.成员变量

            -- this调用行为：    了解
                     明确： 方法只能并列不能包好和嵌套，没有局部方法的说法 ，所有的方法都在成员位置
                     使用场景：当一个成员方法调用另一个成员方法时，一般省略了this.
            -- this调用构造方法：  掌握
                 调用本类无参构造: this();
                 调用本类有参构造: this(参数);

                 优点： 提高了构造方法的复用性

                 注意：
                    1. this()只能放在 "构造方法" 的  "第一行"
                    2. 普通方法中不能调用构造方法

 */
public class OopDemo1 {
    public static void main(String[] args) {
       // Dog dog = new Dog();
//        dog.show();

    }
}
// 狗类
class Dog{
    int num = 10;
    double sum = 100;


    public Dog() {
        // 在无参构造方法中调用本类的有参构造
        this(20, 20.0);
        System.out.println("无参构造方法");
    }

    public Dog(int num, double sum) {
        this.num = num;
        this.sum = sum;
        System.out.println("有参构造方法");
    }

    public void show(){
        // int num = 20;
        System.out.println(sum); // 20
        System.out.println(this.num); // 10
    }


    public void eat(){
        show();
        this.show();
    }
}

// 猫类
class Cat{
    String name;
    int age;
    double weight;
    float height;

    public Cat() {
    }

    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Cat(String name, int age, float height) {
        this(name,age);
        this.height = height;
    }

    public Cat(String name, int age, double weight) {
        this(name,age);
        this.height = height;
    }


}
